DBeaverから踏み台サーバ経由でRedshiftにアクセスしたい
データアナリティクス事業本部の荒木です。
ローカルPCからRedshiftに接続する際に、「Windows環境でWSL2(Ubuntu)からSOCKSプロキシ経由で踏み台サーバにSSH接続してRedshiftにポートフォワード接続」するためのドンピシャな情報が書かれているものがあまり無く、色々と情報を寄せ集めるのが大変だったので自分のケースを紹介したいと思います。
環境
- Windows 10 Pro
- WSL2(Ubuntu 20.04.4 LTS)
- DBeaver(22.1.3)
- SOCKSプロキシ経由(認証不要)
事前作業
以下作業については事前に完了していることを前提とします。
- 接続先Redshiftの構築
- 踏み台サーバ(EC2)の構築
- セキュリティグループの設定
本題
プライベートな環境に構築されたRedshiftに社内プロキシ経由で踏み台サーバにSSH接続し、ポートフォワードで接続しました。
~/.ssh/configに接続情報追加
SSH接続を行いポートフォワーディングでRedshiftへ接続する際にSSHコマンドを使います。その際にオプションが多くコマンドが長くなってしまうため、WSL2環境の~/.ssh/config
に接続情報をまとめて記述しておきます。
~/.ssh/config
Host sample HostName {踏み台サーバアドレス} IdentityFile ~/.ssh/{PEMキーファイル名} User {EC2ユーザー名} ServerAliveInterval 60 LocalForward {15439:任意のローカルポート} {***.redshift.amazonaws.com:Redshiftエンドポイント}:5439 ProxyCommand connect -S {プロキシドメイン情報}:{プロキシポート情報} %h %p IdentitiesOnly yes
踏み台サーバにSSH接続
~/.ssh/config
に記述したHOST名でSSHコマンドを入力し接続します。
設定が間違っていなければ、以下のような画面が表示されます。
$ ssh sample Last login: Wed Aug 24 06:36:05 2022 from {接続元ドメイン} __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ 49 package(s) needed for security, out of 89 available [ec2-user@ip-10-0-0-205 ~]$
DBeaverからlocalhostに接続
DBeaverを立ち上げ[データベース]-[新しい接続]から、[Redshift]ドライバを押下し[次へ]を選択します。 ※ドライバがダウンロードされていなければ[ダウンロード]する必要があります。
接続設定に以下を設定します。
- Host:
localhost
- Port:ポートフォワーディングで設定したローカルのポート番号(今回は15439)
- Database:接続を行いたいデータベース名
- ユーザー名:Redshiftへ接続を行うユーザー名
- パスワード:上記ユーザーのパスワード
設定後、テスト接続
を実施し[接続済み]となれば正常に接続できています。
以上がプロキシ経由で踏み台サーバにSSH接続し、ポートフォワードで接続する方法です。
気を付けるポイント
以下が詰まったポイントです。
~/.ssh/config
に記述するProxyCommand
はUbuntuサーバを利用している場合はConnectコマンドを使用します。コマンドがインストールされていなければ、sudo apt-get install connect-proxy
でインストールします。また、弊社ではSOCKSプロキシサーバを利用しているためconnect -S
を記述していますが、HTTPプロキシサーバを利用する場合はConnect -H
を記述する必要があります。-
DBeaverで使用する
Redshift JDBC Driver 2.0
以降は、SocketFactory のサポートを新たに提供されているため、SOCKSプロキシ経由の接続も可能となります。DBeaverにダウンロードしたRedshift JDBC Driver
のバージョンが2.0
以上であることを確認する必要があります。
おわりに
終わってみれば簡単な設定かもしれませんが、いろいろと詰まった部分があったので誰かの役に立てれば幸いです。
今回接続した方法以外にも、AWS Systems Manager Session Manager
を使用した接続方法もありますのでそちらも試してみてください。
参考
ローカルマシンからプライベート Amazon Redshift クラスターにアクセスする方法